/*
Web: http://www.jsForms.com
Copyright (C) 2008  Igor Demyanov (mailto:Igor.Demyanov@gmail.com)
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
jsForms.DesignMode.IO = {
	DirectoryList: function(dir)
	{
		try {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		} 
		catch (e) {
			alert("Permission to save file was denied.");
		}
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		file.initWithPath(dir);
		var entries = file.directoryEntries;
		var list=[];
		while(entries.hasMoreElements())
		{
		  var entry = entries.getNext();
		  entry.QueryInterface(Components.interfaces.nsIFile);
		  list.push(
		  {
		  	name: entry.leafName,
			isFile :entry.isFile(),
			isDirectory : entry.isDirectory() 
		  }
		  )
		}
		return list;
	},
	SaveTo: function(filename,content){
		try {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		} 
		catch (e) {
			alert("Permission to save file was denied.");
		}
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		file.initWithPath(filename);
		if (file.exists() == false) {
			alert("Creating file... ");
			file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420);
		}
		var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
		/* Open flags 
		 #define PR_RDONLY       0x01
		 #define PR_WRONLY       0x02
		 #define PR_RDWR         0x04
		 #define PR_CREATE_FILE  0x08
		 #define PR_APPEND      0x10
		 #define PR_TRUNCATE     0x20
		 #define PR_SYNC         0x40
		 #define PR_EXCL         0x80
		 */
		/*
		 ** File modes ....
		 **
		 ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
		 ** The 'mode' argument may be ignored by PR_Open on other platforms.
		 **
		 **   00400   Read by owner.
		 **   00200   Write by owner.
		 **   00100   Execute (search if a directory) by owner.
		 **   00040   Read by group.
		 **   00020   Write by group.
		 **   00010   Execute by group.
		 **   00004   Read by others.
		 **   00002   Write by others
		 **   00001   Execute by others.
		 **
		 */
		outputStream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
		//var output = document.getElementById('blog').value;
		var result = outputStream.write(content, content.length);
		outputStream.close();
		return result;
	},
	LoadFrom: function(filename){
		try {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		} 
		catch (e) {
			alert("Permission to read file was denied.");
		}
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		file.initWithPath(filename);
		if (file.exists() == false) {
			alert("File does not exist");
		}
		var is = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
		is.init(file, 0x01, 00004, null);
		var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
		sis.init(is);
		var output = sis.read(sis.available());
		sis.close();
		return output;
	}
}